home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / ASM / RAMDISK.ASM < prev    next >
Assembly Source File  |  2000-09-26  |  4KB  |  302 lines

  1. code   segment
  2.  
  3.  assume cs:code,ds:code,es:code,ss:code
  4.  
  5.  org 0
  6.  
  7.  
  8. befehl    equ 2
  9. status    equ 3
  10. anz_ger   equ 13
  11. wechsel   equ 14
  12. end_adr   equ 14
  13. p_adr     equ 14
  14. anz_bef   equ 16
  15. anzahl    equ 18
  16. bpb_adr   equ 18
  17. sektor    equ 26 ; !!!!!!!!!!!!!!!!!!
  18. ger_bez   equ 22
  19.  
  20.  
  21. erst_b    equ this byte
  22.  
  23.  dw -1,-1
  24.  dw 0100100000000000b
  25.  dw offset strat
  26.  dw offset intr
  27.  db 1
  28.  db 7 dup (0)
  29.  
  30. fkt_tab:
  31.  dw offset init
  32.  dw offset med_test
  33.  dw offset get_bpb
  34.  dw offset lesen
  35.  dw offset lesen
  36.  dw offset format
  37.  dw offset dummy
  38.  dw offset dummy
  39.  dw offset schreibe
  40.  dw offset schreibe
  41.  dw offset dummy
  42.  dw offset dummy
  43.  dw offset schreibe
  44.  dw offset dummy
  45.  dw offset dummy
  46.  dw offset no_rem
  47.  dw offset schreibe
  48.  
  49. db_ptr   dw (?),(?)
  50. rd_seg   dw (?)
  51.  
  52. bpb_ptr  dw offset bpb,(?)
  53.  
  54. boot_sek:
  55.  db 3 dup (0)
  56.  db "MITI 1.0"
  57. bpb:
  58.  dw 512
  59.  db 1
  60.  dw 1
  61.  db 1
  62.  dw 64
  63.  dw 640 
  64.  db 0FDh
  65.  dw 1
  66.  dw 8
  67.  dw 1
  68.  dw 0
  69.  db 482 dup (0)
  70.  
  71. vol_name:
  72.  db "RAMDISK    "
  73.  db 8
  74.  
  75. strat  proc far
  76.  mov cs:db_ptr,bx
  77.  mov cs:db_ptr+2,es
  78.  ret
  79. start  endp
  80.  
  81. intr   proc far
  82.  push ax
  83.  push bx
  84.  push cx
  85.  push dx
  86.  push di
  87.  push si
  88.  push bp
  89.  push ds
  90.  push es
  91.  pushf
  92.  
  93.  push cs
  94.  pop ds
  95.  
  96.  les di,dword ptr db_ptr
  97.  mov bl,es:[di+befehl]
  98.  cmp bl,anz_bef
  99.  jle bc_okay
  100.  
  101.  mov ax,8003h
  102.  jmp short intr_end
  103.  
  104. bc_okay:
  105.  shl bl,1
  106.  xor bh,bh
  107.  call [fkt_tab+bx]
  108.  
  109. intr_end  label near
  110.  push cs
  111.  pop ds
  112.  
  113.  les di,dword ptr db_ptr
  114.  or ax,0100h
  115.  mov es:[di+status],ax
  116.  
  117.  popf
  118.  pop es
  119.  pop ds
  120.  pop bp
  121.  pop si
  122.  pop di
  123.  pop dx
  124.  pop cx
  125.  pop bx
  126.  pop ax
  127.  ret
  128. intr  endp
  129.  
  130.  
  131. init   proc near
  132.  mov ah,30h
  133.  int 21h
  134.  cmp al,3
  135.  jb prinm
  136.  
  137.  mov al,es:[di+ger_bez]
  138.  add al,"A"
  139.  mov im_ger,al
  140.  
  141. prinm:
  142.  mov dx,offset initm
  143.  mov ah,9
  144.  int 21h
  145.  
  146.  mov word ptr es:[di+end_adr],offset ramdisk+8000h
  147.  mov ax,ds
  148.  add ax,5000h
  149.  mov es:[di+end_adr+2],ax
  150.  mov byte ptr es:[di+anz_ger],1
  151.  mov word ptr es:[di+bpb_adr],offset bpb_ptr
  152.  mov es:[di+bpb_adr+2],ds
  153.  
  154.  mov ax,cs
  155.  mov bpb_ptr+2,ds
  156.  mov dx,offset ramdisk
  157.  mov cl,4
  158.  shr dx,cl
  159.  add ax,dx
  160.  mov rd_seg,ax
  161.  
  162.  mov es,ax
  163.  xor di,di
  164.  mov si,offset boot_sek
  165.  mov cx,255
  166.  rep movsw
  167.  
  168.  mov di,512
  169.  mov al,0FDh
  170.  stosb
  171.  mov di,513
  172.  mov al,0FFh
  173.  stosb
  174.  mov di,514
  175.  mov cx,255
  176.  xor ax,ax
  177.  rep stosw
  178.  
  179.  mov di,1024
  180.  mov si,offset vol_name
  181.  mov cx,6
  182.  rep movsw
  183.  
  184.  mov cx,3000
  185.  xor ax,ax
  186.  rep stosw
  187.  
  188.  xor ax,ax
  189.  ret
  190. init  endp
  191.  
  192.  
  193. dummy   proc near
  194.  xor ax,ax
  195.  ret
  196. dummy   endp 
  197.  
  198.  
  199. format  proc near
  200.  push ax
  201.  mov ah,0bh
  202.  mov bh,0
  203.  mov bl,9
  204.  int 010h
  205.  pop ax
  206.  xor ax,ax
  207.  ret
  208. format  endp
  209.  
  210.  
  211. med_test  proc near
  212.  mov byte ptr es:[di+wechsel],1
  213.  xor ax,ax
  214.  ret
  215. med_test  endp
  216.         
  217.  
  218. get_bpb  proc near
  219.  mov word ptr es:[di+bpb_adr],offset bpb
  220.  mov word ptr es:[di+bpb_adr+2],ds
  221.  xor ax,ax
  222.  ret
  223. get_bpb  endp
  224.  
  225.  
  226. no_rem  proc near
  227.  mov ax,20
  228.  ret
  229. no_rem  endp
  230.  
  231.  
  232. schreibe  proc near
  233.  xor bp,bp
  234.  jmp short move
  235. schreibe  endp
  236.  
  237. lesen  proc near
  238.  mov bp,1
  239. lesen   endp
  240.  
  241.  
  242. move  proc near
  243.  
  244.  mov bx,es:[di+anzahl]
  245.  mov dx,es:[di+sektor]
  246.  les di,es:[di+p_adr]
  247.  
  248. move_1:
  249.  or bx,bx
  250.  je move_e
  251.  mov ax,dx
  252.  mov cl,5
  253.  shl ax,cl
  254.  
  255.  add ax,cs:rd_seg
  256.  mov ds,ax
  257.  xor si,si
  258.  mov ax,bx
  259.  cmp ax,128
  260.  jbe move_2
  261.  mov ax,128
  262.  
  263. move_2:
  264.  sub bx,ax
  265.  add dx,ax
  266.  mov ch,al
  267.  xor cl,cl
  268.  or bp,bp
  269.  jne move_3
  270.  mov ax,es
  271.  push ds
  272.  pop es
  273.  mov ds,ax
  274.  xchg si,di
  275.  
  276. move_3:
  277.  rep movsw
  278.  or bp,bp
  279.  jne move_1
  280.  mov ax,es
  281.  push ds
  282.  pop es
  283.  mov ds,ax
  284.  xchg si,di
  285.  jmp short move_1
  286.  
  287. move_e:
  288.  xor ax,ax
  289.  ret
  290. move  endp
  291.  
  292.  org (($-erst_b) + 16 - (($-erst_b) mod 16))
  293.  
  294. ramdisk  equ this byte
  295.  
  296. initm  db "160 KB RAM-DISK in Drive "
  297. im_ger db "?"
  298.        db ": is installed. Copyright (C) 1993 by GSI$",13,10,10
  299.  
  300. code  ends
  301.  end
  302.